home *** CD-ROM | disk | FTP | other *** search
/ Nibble Magazine / nib16.dsk / DOS EXTENDER.bas < prev    next >
BASIC Source File  |  2023-02-26  |  6KB  |  114 lines

  1. 10  REM  **********************
  2. 20  REM  *    DOS EXTENDER    *
  3. 30  REM  *  BY  JOEL BUCKLEY  *
  4. 40  REM  * COPYRIGHT (C) 1984 *
  5. 50  REM  * BY MICROSPARC, INC *
  6. 60  REM  * LINCOLN, MA. 01773 *
  7. 70  REM  **********************
  8. 100  TEXT : HOME 
  9. 110  PRINT "DOS EXTENDER"
  10. 120  PRINT "---------------------------------------"
  11. 130  PRINT "** COPYRIGHT 1984 BY MICROSPARC, INC. **"
  12. 200  REM INIT
  13. 210 MAX = 65535:P16 = 2: REM  P16 IS POWER OF 16 USED AS BASE FOR DIV AND MOD FUNCTIONS
  14. 220  DEF  FN DIV(A) =  SGN(A) * INT( ABS(A)/(16 ^P16))
  15. 230  DEF  FN MOD(A) = A -16 ^P16 * FN DIV(A)
  16. 240  DEF  FN PK2(A) =  PEEK(A) +256 * PEEK(A +1): REM  16-BIT PEEK
  17. 250  DEF  FN DEC(HEX) = HEX -55 +7 *(HEX <58): REM  USED IN HEX TO DEC CONVERSION
  18. 260 DA =  PEEK(981) *256: REM  $3D2 DOS BOTTOM
  19. 270 DV =  PEEK(DA +645) + PEEK(DA +8547):DV = (DV = 4) +2 *(DV = 5) +2.1 *(DV = 6) +3 *(DV = 12): REM  $9F85, $BE63  DOS VERSION
  20. 300  REM CURRENT STATUS
  21. 310  POKE 34,3: HOME : REM  DON'T SCROLL TITLE
  22. 320  PRINT : PRINT "   THIS PROGRAM EXTENDS DOS IN MEMORY,"
  23. 330  PRINT : PRINT "CREATING SPACE FOR MACHINE LANGUAGE"
  24. 340  PRINT : PRINT "ROUTINES BETWEEN THE BOTTOM OF DOS AND"
  25. 350  PRINT : PRINT "THE TOP OF THE FILE BUFFERS.  WORKS"
  26. 360  PRINT : PRINT "WITH DOS 3.2, 3.2.1, OR 3.3."
  27. 370  GOSUB 1410: REM  MEMORY DOS DESCRIPTION
  28. 380  IF DA -45 < > FN PK2(DA)  THEN  INVERSE : PRINT : PRINT "NOTE: DOS HAS ALREADY BEEN EXTENDED!"; CHR$(7); CHR$(7); CHR$(7): NORMAL 
  29. 390  VTAB 24: PRINT "PRESS ANY KEY TO CONTINUE.";: GET G$: HTAB 1: CALL  -868: REM  ERASE THIS LINE
  30. 400  REM MEMORY EXTEND
  31. 410  PRINT : PRINT : PRINT : PRINT : PRINT : PRINT : PRINT : PRINT : PRINT : PRINT : POKE 34,12
  32. 420  PRINT "EXTEND DOS IN MEMORY BY:"
  33. 430  PRINT "   1: AN INTEGER MULTIPLE OF 256 BYTES."
  34. 440  PRINT "   2: AN INTEGER MULTIPLE OF 595 BYTES."
  35. 450  PRINT "      (EQUIVALENT TO ONE FILE BUFFER)."
  36. 460  PRINT "   3: AN ARBITRARY NUMBER OF BYTES."
  37. 470  PRINT "   4: QUIT."
  38. 480  PRINT : PRINT "NOTE: EXTENSIONS ARE FROM THE NORMAL"
  39. 490  PRINT "FIRST FILE BUFFER, AND DO NOT INCLUDE"
  40. 500  PRINT "EXTENSIONS ALREADY MADE, IF ANY."
  41. 510  PRINT : PRINT "   WHICH:";
  42. 520  PRINT  CHR$(7);: GET G$:G =  VAL(G$): ON G <1  OR G >4 GOTO 520: PRINT G$: PRINT 
  43. 530  PRINT : PRINT : PRINT : PRINT : PRINT : POKE 34,16: HOME 
  44. 540  ON G GOTO 550,570,610,890
  45. 550  INPUT "EXTEND BY HOW MANY 256 BYTE SECTORS?";NS
  46. 560 NB = NS *256: GOTO 620
  47. 570  INPUT "EXTEND BY HOW MANY 595 BYTE BUFFERS?";NB
  48. 580  PRINT : PRINT "CHANGE MAXFILES DEFAULT OF " PEEK(DA +3505);: GOSUB 1210: IF NO GOTO 600
  49. 590  PRINT  CHR$(7): INPUT "NEW MAXFILES DEFAULT: (1-16) ";X: ON X <1  OR X >16 GOTO 590: POKE DA +3505,X: GOTO 580
  50. 600 NB = NB *595: GOTO 620
  51. 610  PRINT "EXTEND BY HOW MANY BYTES": GOSUB 910:NB = DP: PRINT " - RIGHT";: GOSUB 1210: IF NO GOTO 610
  52. 620  POKE DA, FN MOD(DA -45 -NB): POKE DA +1, FN DIV(DA -45 -NB): REM  $9D00.9D01 - NEW FILE BUFFER POINTER
  53. 630  POKE DA +3415, PEEK(DA +3505): REM  $AA57, $AAB1 - SET MAXFILES TO DEFAULT VALUE
  54. 640  CALL DA +2772: REM  $A7D4 - REBUILD FILE BUFFERS
  55. 650  POKE 34,4: HOME 
  56. 660  PRINT : PRINT "FILE BUFFERS HAVE BEEN REBUILT BENEATH": PRINT : PRINT "MEMORY EXTENDED DOS."
  57. 670  GOSUB 1410: REM  MEMORY DOS DESCRIPTION
  58. 700  REM DISK EXTEND
  59. 710  PRINT : PRINT "EXTEND DOS FOR SAVING TO DISK";: GOSUB 1210: IF NO GOTO 890
  60. 720  PRINT : PRINT : PRINT : PRINT : PRINT : PRINT : PRINT : PRINT : PRINT : POKE 34,10: HOME 
  61. 730  GOSUB 1510
  62. 740  PRINT : PRINT "DOS SHOULD BE EXTENDED BY " FN DIV(DA) - FN DIV( FN PK2(DA) +45)" SECTORS TO": PRINT "INCLUDE ALL OF MEMORY EXTENDED DOS."
  63. 750  IF  FN PK2(DA +12) < >(DA)  THEN  INVERSE : PRINT : PRINT "DOS INIT BOTTOM HAS ALREADY BEEN": PRINT "EXTENDED BY " FN DIV(DA) - PEEK(DA +13)" SECTORS.": NORMAL 
  64. 760  PRINT : PRINT "EXTEND DOS BY HOW MANY SECTORS TOTAL?"
  65. 770  PRINT "(0-"4 +9 *(DV = 3);: PRINT  CHR$(7);: INPUT ")";NS: ON NS <0  OR NS >4 +9 *(DV = 3) GOTO 770
  66. 780  POKE DA +13, FN DIV(DA) -NS: REM  $9D0D - DOS BOTTOM FOR INIT
  67. 790  IF NS >11  THEN NS = 11: REM  USE MASTER RELOCATION CODE SPACE
  68. 800  IF DV < >3  THEN 840: REM  SKIP IF NOT DOS 3.3
  69. 810  POKE DA +6682,4 +NS: REM  $B71A - LAST SECTOR OF TRACK 2 TO READ
  70. 820  POKE DA +6755,4 +NS: REM  $B763 - LAST SECTOR OF TRACK 2 TO WRITE
  71. 830 NS = NS +2
  72. 840  POKE DA +6880,25 +NS: REM  $B7E0 - # SECTORS IN 3RD STAGE BOOT
  73. 850  POKE 34,3: HOME 
  74. 860  PRINT : PRINT "DOS HAS BEEN EXTENDED FOR DISK SAVE": PRINT : PRINT "(THROUGH INIT OR SLAVE MAKER)."
  75. 870  GOSUB 1410: REM  MEMORY DOS DESCRIPTION
  76. 880  GOSUB 1510: REM  DISK DOS DESCRIPTION
  77. 890  POKE 34,0: END 
  78. 900  REM HEX/DEC NUMERIC INPUT
  79. 910  INPUT "($ INDICATES HEXADECIMAL):";G$
  80. 920 DP =  VAL(G$)
  81. 930  IF  LEFT$(G$,1) < >"$" GOTO 1010
  82. 940  REM HEX TO DEC
  83. 950 DP = 0
  84. 960 HX$ =  RIGHT$("0000" + MID$ (G$,2),4)
  85. 970  FOR P16 = 3 TO 0  STEP  -1
  86. 980 DP = DP *16 + FN DEC( ASC( MID$ (HX$,4 -P16,1)))
  87. 990  NEXT P16:P16 = 2
  88. 1000  REM RANGE CHECK
  89. 1010  IF  ABS(DP) >MAX  THEN 910
  90. 1020  IF DP <0  THEN DP = DP +MAX: REM  CONVERT NEGATIVE NUMBERS TO POSITIVE
  91. 1030  REM DEC TO HEX
  92. 1040 N = DP
  93. 1050 HX$ = ""
  94. 1060  FOR P16 = 3 TO 0  STEP  -1
  95. 1070 HX$ = HX$ + MID$ ("0123456789ABCDEF", FN DIV(N) +1,1)
  96. 1080 N =  FN MOD(N)
  97. 1090  NEXT P16:P16 = 2
  98. 1100  REM DISPLAY NUMBERS
  99. 1110  PRINT DP"/$"HX$;
  100. 1120  RETURN 
  101. 1200  REM YESNO
  102. 1210  PRINT " (Y/N)?";
  103. 1220  PRINT  CHR$(7);: GET G$:YES = G$ = "Y":NO = G$ = "N": ON   NOT (YES  OR NO) GOTO 1220: PRINT G$: RETURN 
  104. 1400  REM MEMORY DOS
  105. 1410  PRINT : PRINT "   CURRENT DOS: "(DA +8960)/1024"K DOS 3."DV
  106. 1420  IF DV <2  THEN  INVERSE : PRINT : PRINT "THIS VERSION OF DOS NOT SUPPORTED!" CHR$(7); CHR$(7); CHR$(7): NORMAL : GOTO 890
  107. 1430  PRINT : PRINT "TOP OF FIRST FILE BUFFER (+7):"
  108. 1440  PRINT : PRINT "CURRENT:";:DP =  FN PK2(DA) +45: GOSUB 1040: PRINT "  NORMAL:";:DP = DA: GOSUB 1040: PRINT : IF G  THEN  PRINT "(LOCATE USER ROUTINES IN ABOVE RANGE.)"
  109. 1450  PRINT : PRINT "CURRENT MAXFILES: " PEEK(DA +3415)"  DEFAULT: " PEEK(DA +3505)
  110. 1460  RETURN 
  111. 1500  REM DISK DOS
  112. 1510  PRINT : PRINT "DOS BOTTOM FOR INIT:"
  113. 1520  PRINT : PRINT "CURRENT:";:DP =  FN PK2(DA +12): GOSUB 1040: PRINT "  NORMAL:";:DP = DA: GOSUB 1040: PRINT : PRINT "(ROUTINES IN THE ABOVE RANGE WILL BE": PRINT "WRITEN TO DISK WITH DOS DURING INIT.)"
  114. 1530  RETURN